까먹고 있었던 내 오픈소스 프로젝트를 들추어보다.

마치 갤러리에 오래된 사진을 정리하듯이, 깃허브 레포지토리들을 정리해야 할 일이 있었다. 그 속에서 이런 레포를 찾았다. hwp-converter-api라는 레포지토리이다.
내가 이 레포를 찾고 놀란 점은 비단 내가 직접 만들고 게시한 프로젝트를 아주 완벽하게 까먹고 있었다는 것과 더불어, 그 레포에 11개의 깃허브 스타가 달려있었다는 점이다.
AutoRAG를 통해 4천개가 넘는 깃허브 스타를 받아본 적이 있는 나이지만, 이 11개의 스타는 보다 특별하게 느껴졌다. 왜냐하면, 나는 단 한 번도 이 hwp-converter-api라는 레포를 홍보하거나 외부로 알린 적이 없기 때문이다. 내가 한 것은 그저 private 상태의 레포를 public으로 바꾸었을 뿐이다.
흔히 새 프로젝트를 진행하면 올리는 긱뉴스나 레딧, 그리고 나의 링크드인에도 게시한 적이 없는, 그런 프로젝트였다. 다시 말해, 누군가 찾아와서 사용하는 것을 전혀 기대하지 않은 프로젝트인 것이다.

음… 일단 이 프로젝트가 어떤 것인지 잠깐 이야기 해보겠다.

hwp-converter-api는 뭐하는 것이고 왜 만들었는가?

아주 간단한 일을 한다. hwp 파일을 API 서버로 전송하면 그것을 텍스트로 바꾸어서 응답으로 보내주는 역할을 한다. hwp 파일 reader용 API 서버를 만들었다고 보면 된다.

그러면 이것을 왜 만들었을까? 당시 (2년여 전)에는 hwp 파일을 읽고 파싱하는 것이 python에서 매우 힘들었다. 물론 가능은 했지만, 뭔가 제대로 된 라이브러리가 없었다.

RAG를 할 때에는 무엇보다 파싱이 중요하다는 것 모두들 알고 있을 것이다. 그리고 한국인이라면 피할 수 없는 hwp 파일의 골치 아픔도 누구나 공감할 것이다. 나도 간단한 RAG를 만들어 보며 그런 골머리를 앓고 있었고, hwp 파일을 처리하는 라이브러리를 찾던 중 Java로 되어 있는 hwplib과 hwpxlib을 접하게 되었다.

처음에는 Python으로 해당 라이브러리르 포팅하고 싶었으나, Java를 Python과 연결하는 간단하지 않은 일이었다. 당시에는 물심양면 나를 도와줄 클로드 코드나 커서도 없었다. (gpt-4가 막 나왔던 때였던가??)

그렇다면 그냥 Java로 API 서버를 만들고 그 서버에 요청을 보내서 hwp 파싱을 구현해야 겠다는 생각을 하게 되었다. Python으로 HTTP 요청 보내기는 식은 죽 먹기 아닌가?

그래서 Javalin을 이용해서 코틀린으로 아주 간단한 API 서버를 구현했다. 그냥 hwp 파일을 보내면 파싱해서 보내주는… 그게 이 프로젝트의 전부이다. hwp와 hwpx 각각 하나의 엔드포인트만 존재한다.

오픈소스의 강력함

내가 새삼스럽게 이런 글을 쓰는 이유는, 하루 만에 쓰여진 아주 작은 프로젝트가 적어도 8명 (스타 11개중 3개는 팀 동료와 나다) 에게 도움이 되었다는 사실이다. 내가 기억도 못하던 작은 프로젝트가 누군가에게, RAG 커뮤니티에 좋은 영향을 끼치고 있었다는 것이다!

내가 이 작은 프로젝트를 그냥 내 맥에, 아니면 private 레포로 남겨 두었다면 아무런 일도 일어나지 않았을 것이다. 하지만 public으로 열여두고, 정말 아무것도 안했음에도 누군가 내 레포를 찾아준 것이다.
아주 놀라운 일이 아닐 수 없다.

이래서 내가 오픈소스를 좋아한다는 생각이 확 느껴지는 경험이었다.
그리고 아무리 작은 기여라도, 아무리 작은 기능이더라도 오픈소스로 공개하는 것이 좋겠다는 생각도 더 굳어지게 되었다.
그 이유를 다시금 꼽자면… 그냥 재밌지 않은가? 내가 까먹었던 무엇인가를 다른 사람들이 용케도 찾아내어 “스타”로 칭찬을 해주다니;;

뭐… 결론을 내자면, 여러분이 만들었던 아주 작은 프로젝트라도 public 전환이 두려워서 망설이고 있다면, 주저없이 public 레포로 전환해 보는 것은 어떠할까? 별 것 아닌 프로젝트라도 누군가에게는 큰 도움이 될 수 있을 것이라 확신한다.